#!/bin/bash
#
# 指定版本：
# 格式：version=xxxx
# version: latest - 最新
#          x.xx.xxxxx - 指定版本号
# 
set -e # 命令出错就退出
trap 'catchError $LINENO $BASH_COMMAND' SIGHUP SIGINT SIGQUIT EXIT # 捕获错误情况

catchError() {
    exit_code=$?
    if [ $exit_code -ne 0 ]; then
        fail "\033[31mcommand: $2\n  at $0:$1\n  at $STEP\033[0m"
    fi
    exit $exit_code
}
success() {
    echo -e "\033[42;37m 成功 \033[0m $1"
}
fail() {
    echo -e "\033[41;37m 失败 \033[0m $1"
}
notice() {
    echo -e "\033[36m $1 \033[0m "
}

root_dir=$(cd `dirname $0`/.. && pwd -P)

echo "==========Initializing node=========="

if [ -f "$root_dir/node/bin/node" ]; then
  success "node安装完毕"
else
  "$root_dir/tools/update-node.sh"
  success "node ok"
fi

if [ ! -f "$root_dir/node/bin/node" ]; then
  fail "Node安装失败"
  exit
fi
# 将node加入环境
export PATH="$root_dir/node/bin":$PATH
if [ "$ACTION_MODE" != "true" ]; then
    notice "非ACTION模式, 设置镜像源"
    npm config set registry http://registry.npmmirror.com/ # 注册模块镜像
    npm config set disturl http://npmmirror.com/dist # node-gyp 编译依赖的 node 源码镜像
    ## 以下选择添加
    npm config set sass_binary_site http://npmmirror.com/mirrors/node-sass # node-sass 二进制包镜像
    npm config set electron_mirror http://npmmirror.com/mirrors/electron/ # electron 二进制包镜像
    npm config set puppeteer_download_host http://npmmirror.com/mirrors # puppeteer 二进制包镜像
    npm config set chromedriver_cdnurl http://npmmirror.com/mirrors/chromedriver # chromedriver 二进制包镜像
    npm config set operadriver_cdnurl http://npmmirror.com/mirrors/operadriver # operadriver 二进制包镜像
    npm config set phantomjs_cdnurl http://npmmirror.com/mirrors/phantomjs # phantomjs 二进制包镜像
    npm config set selenium_cdnurl http://npmmirror.com/mirrors/selenium # selenium 二进制包镜像
    npm config set node_inspector_cdnurl http://npmmirror.com/mirrors/node-inspector # node-inspector 二进制包镜像
    # npm cache clean --force # 清空缓存
fi
echo "=====安装node-gyp nw-gyp===="
npm uninstall node-gyp -g
npm install node-gyp nw-gyp npm -g
node-gyp install
node-gyp list

echo "==========Initializing nwjs=========="
if [ -f "$root_dir/nwjs/nw" ]; then
  success "nwjs安装完毕"
else
  node "$root_dir/tools/update-nwjs-node"
fi

# 7z旧版本解压不正常
# rm -rf "$root_dir/tmp/7z"
# mkdir -p "$root_dir/tmp/7z"
# cd "$root_dir/tmp/7z"
# wget https://www.7-zip.org/a/7z2107-linux-x64.tar.xz
# tar -xJf 7z2107-linux-x64.tar.xz
# ln -s 7zz 7z
# export PATH="$root_dir/tmp/7z:$PATH"

echo "==========Initializing wechat-devtools package=========="

if [[ $@ == *version* ]];then
  # 参数有版本号，优先级高，清空TARGET_VERSION
  echo "参数有版本号"
  TARGET_VERSION=""
else
  # 参数没有版本号，获取
  echo "参数没有版本号"
  VERSION_DATA=$( cat "$root_dir/conf/devtools_v" )
  VERSION_DATA=(${VERSION_DATA//,/ })
  TARGET_VERSION="version=${VERSION_DATA[0]}"
fi
echo "TARGET_VERSION: $TARGET_VERSION"
if [ ! -f "$root_dir/package.nw/package.json" ];then
  # 没装，直接装
  node "$root_dir/tools/update-wechat-devtools-node" $TARGET_VERSION $@
  exit 0
fi
# 装了，获取已安装版本
DEVTOOLS_VERSION=$( cat "$root_dir/package.nw/package.json" | grep -m 1 -Eo "\"[0-9]{1}\.[0-9]{2}\.[0-9]+" )
DEVTOOLS_VERSION="${DEVTOOLS_VERSION//\"/}"
# 已安装, 比较目标版本
if [ "$TARGET_VERSION" == "$DEVTOOLS_VERSION" ];then
  success "微信开发者工具安装完毕"
  exit 0
fi
node "$root_dir/tools/update-wechat-devtools-node" $TARGET_VERSION $@
